package com.example.domain.response;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 通用HTTP响应类，用于封装HTTP请求的响应结果
 * 该类使用泛型以支持灵活的数据类型
 *
 * @param <T> 响应数据的类型
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class HttpResponse<T> {
    /**
     * 响应状态码，用于表示请求的处理结果
     * 例如：0 表示成功，其他值表示不同的错误状态
     */
    private int code;

    /**
     * 响应数据，存储请求处理后的结果数据
     * 泛型设计允许承载不同类型的响应数据
     */
    private T data;

    /**
     * 响应消息，用于提供更详细的响应信息
     * 通常用于描述错误详情或成功提示
     */
    private String message;

    /**
     * 创建一个成功的HTTP响应对象
     * 此方法提供了一个便捷的方式来创建一个表示成功状态的HttpResponse对象
     *
     * @param data 成功响应的数据
     * @param <T>  响应数据的类型
     * @return 一个表示成功的HttpResponse对象
     */
    public static <T> HttpResponse<T> success(T data) {
        return new HttpResponse<>(0, data, "success");
    }

    /**
     * 创建一个错误的HTTP响应对象
     * 此方法用于简化错误响应的创建过程，将状态码和消息标准化
     *
     * @param code    错误状态码
     * @param message 错误消息
     * @return 一个表示错误的HttpResponse对象
     */
    public static HttpResponse<?> error(int code, String message) {
        return new HttpResponse<>(code, null, message);
    }
}
